home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / utilitys / ed3_1_1 / part01 / ed3.h < prev    next >
C/C++ Source or Header  |  1991-11-07  |  7KB  |  224 lines

  1. /*
  2.     Include file for all modules of the 3d editor.
  3.     Important global stuff.
  4.  
  5. 09-02-91 added pselected, ploose
  6. 08-28-91 added MAX_EDGES
  7. 08-24-91 moved Gadget IDs to edgr.c
  8. 08-23-91 moved Menu IDs to sysgr.c
  9.          moved many flags into a new "Flags" structure
  10. */
  11.  
  12. #define INTEGER 1
  13.  
  14. #define MAX_EDGES    20    /* The most edges any polygon is allowed to have */
  15. #define OPERATIONS    100    /* max */
  16. #define ACTIONBUF    300    /* action buffer size */
  17. #define REFRESH_LEVEL 100 /* If there are less then REFRESH_LEVEL facets on
  18. the screen, undo, redo and and move_points will do a full refresh to keep the
  19. display clean.  Obviously we don't ALWAYS want to do a full refresh if the
  20. object has many hundreds of facets */
  21.  
  22. #include "sysdefed.h"    /* system-specific definitions */
  23. #include "edtypes.h"    /* typedefs */
  24.  
  25. #if PROTOS
  26. #include "create.p"    /* include prototypes */
  27. #include "edgr.p"
  28. #include "eded.p"
  29. #include "sysgr.p"
  30. #include "edio.p"
  31. #include "edvan.p"
  32. #include "freq.p"
  33. #include "undo.p"
  34. #endif
  35.  
  36. #define FILE_EXT    ".3d"
  37. #define GADX        90        /* width of gadget boxes */
  38. #define edit_minx GADX+1    /* bounds of editing area */
  39. /* edit_miny is a variable based on the size of the title bar */
  40.  
  41. /* gadget IDs */
  42. #define GID_ADD        1
  43. #define GID_DELETE    2
  44. #define GID_SELECTOR    3
  45. #define GID_MOVE    4
  46. #define GID_FACE    5
  47. #define GID_POLY    6
  48. #define GID_MORE    7
  49. #define GID_DEFACE    8
  50. #define GID_DEPOLY    9
  51. #define GID_MORE2    10
  52. #define GID_ROTATE    11
  53. #define GID_ROTP    12
  54. #define GID_ZOOM    13
  55. #define GID_DIST    14
  56. #define GID_GLUE    15
  57. #define GID_UNDO    16
  58. #define GID_REDO    17
  59. #define GID_XY        18
  60. #define GID_XZ        19
  61. #define GID_ZY        20
  62. #define GID_3D        21
  63. #define GID_color1    22
  64. #define GID_color2    23
  65. #define GID_color3    24
  66.  
  67. /* editing modes */
  68. #define M_ADDP    0    /* add point */
  69. #define M_DELP    1    /* delete point */
  70. #define M_SELE    2    /* select/deselect points */
  71. #define M_MOVP    3    /* move point */
  72. #define M_FACE    4    /* start a new face */
  73. #define M_POLY    5    /* start a new face */
  74. #define M_MORE    6    /* designate another point of the face or poly to create */
  75. #define M_DEFA    7    /* remove a face */
  76. #define M_DEPO    8    /* remove a poly */
  77. #define M_KMORE    9    /* designate another point of the face or poly to remove */
  78. #define M_ROTA    10    /* rotate around third dimension: place axis */
  79. #define M_ROTP    11    /* rotate around third dimension: move the points */
  80. #define M_ZOOM    12    /* zoom in/out */
  81. #define M_DIST    13    /* adjust distance tool */
  82. #define M_GLUE    14    /* glue two points together (fuse into one point) */
  83.  
  84. /* display modes */
  85. #define DM_XY    0    /* three 2D display modes */
  86. #define DM_XZ    1
  87. #define DM_ZY    2
  88. #define DM_3D    3    /* 3D view mode, unimplemented */
  89.  
  90. /* Toggleable menu item numbers */
  91. #define MI_ASSUME_POLY    0
  92. #define MI_COORDS        1
  93. #define MI_CROSSHAIR    2
  94. #define MI_DISTANCETOOL    3
  95. #define MI_ROTATEALL    4
  96. #define MI_UNDOBUF        5
  97. #define MI_UNDOBUFSIZE    6
  98.  
  99. /* error codes */
  100. #define OKAY            0
  101. #define ERR_NOTHING        1    /* nothing was there */
  102. #define ERR_CANTOPEN    2    /* can't open a file */
  103. #define ERR_NOTED3        3    /* not an ED3 file */
  104. #define ERR_NOMEM        4    /* not enough memory for operation */
  105. #define ERR_NOMEM_POINT    5    /* not enough memory for more points */
  106. #define ERR_NOMEM_FACE    6    /* not enough memory for more faces */
  107. #define ERR_NOMEM_POLY    7    /* not enough memory for more polygons */
  108. #define ERR_BADFACE        8    /* face refers to a non-existent point */
  109. #define ERR_SYS            9
  110. #define ERRORS            10
  111.  
  112. /* Menu options */
  113. #define MO_NOTENABLED    1
  114. #define MO_TOGGLE        2    /* allow user to toggle w/checkmark */
  115. #define MO_CHECKED        4    /* checked at creation time */
  116.  
  117. /* Gadget flags */
  118. #define GF_NOSELECT        1    /* this gadget should not be selectable */
  119.  
  120. /* display flags */
  121. #define DF_WORKBENCH    1
  122. #define DF_MED_RES        2
  123. #define DF_SYS_PALETTE    4    /* use the system (in this case workbench) palette */
  124.  
  125. /* mouse flags */
  126. #define MF_DOUBLE    2
  127. #define MF_SHIFTED    4
  128.  
  129. /* action types */
  130. #define AT_ADD_P    1    /* add point */
  131. #define AT_DEL_P    2    /* del point */
  132. #define AT_ADD_F    3    /* add face */
  133. #define AT_DEL_F    4    /* del face */
  134. #define AT_ADD_Q    5    /* add polygon */
  135. #define AT_DEL_Q    6    /* del polygon */
  136. #define AT_MOVE_P    7    /* move point */
  137. #define AT_JOIN_P    8    /* join two points (replace one with another) */
  138. #define AT_DEL_V    9    /* delete vertex */
  139. #define AT_MORPH_Q    10    /* degenerate a polygon into a face */
  140.  
  141. /* polyhedron numbers */
  142. #define POLY_TET    0
  143. #define POLY_OCT    1
  144. #define POLY_CUBE    2
  145. #define POLY_ICOS    3
  146. #define POLY_DODEC    4
  147. #define POLY_RHOMB    5
  148. #define POLY_CUBOCT    6
  149.  
  150. /* point flags: in the code field of EdPoint (below) */
  151. #define PF_LOOSE    (1 << 14)
  152. #define PF_SELECTED    (1 << 15)
  153. #define PF_CLIP        0x000f    /* low four bits used for clipping info */
  154.  
  155. #define EV_HITBUTTON    1    /* pressed a boolean gadget */
  156. #define EV_HITRETURN    2    /* hit return in a long_int gadget */
  157. #define EV_CHECKINT        3
  158. #define EV_CANCEL        4    /* like, if the user closes the window */
  159.  
  160. /* point macros */
  161. #define pselected(p)    (point[p].code & PF_SELECTED)
  162. #define ploose(p)        (point[p].code & PF_LOOSE)
  163. #define off_screen(p)    (point[p].code & PF_CLIP)
  164.  
  165. /* an unused value returned by ShowGetLong to signal cancellation */
  166. #define SGL_CANCEL -69696969    /* orgy */
  167.  
  168. #ifdef DEFINE_GLOBALS
  169. # define vextern
  170. #else
  171. # define vextern extern
  172. #endif
  173.  
  174. /******* global variables *******/
  175.  
  176. /* pointers to the complete set of 3D points and faces */
  177. vextern EdPoint *point;
  178. vextern Face *face;
  179. vextern Polygon *poly;
  180. vextern EndPoint dtool_end[2];    /* the ends of the distance tool line segment */
  181. vextern Flags flags;
  182. vextern Colors colors;
  183.  
  184. vextern short *select_p;    /* array of selected points */
  185.  
  186. /* temporary: remember the points when creating a new polygon */
  187. vextern unsigned short temp_poly[20];
  188.  
  189. vextern unsigned short MAX_POINTS, MAX_FACES, MAX_SELECT, MAX_POLYS;
  190. vextern unsigned short points, faces, polys, selected;
  191. vextern unsigned short new_seg, first_point, last_point;
  192.  
  193. vextern Point3D axis;        /* point around which we rotate */
  194. vextern Point3D point0;        /* always 0 */
  195. vextern Vector3D movement;    /* the direction we drag the points */
  196. vextern Vector3D offset;    /* current viewing offset */
  197. vextern Vector3D vector0;    /* always 0 */
  198.  
  199. /* Please Forgive Me for Using Short Names for some Global Variables */
  200.  
  201. vextern coord gx, gy, gz;    /* global 3d cursor location */
  202. vextern short px, py,
  203.           mx, my;        /* mouse location on screen */
  204. vextern char mode,        /* editing mode */    
  205.          dmode;            /* display mode (XZ etc.)play mode (XZ etc. */
  206.  
  207. vextern short sxmax, symax;    /* flexible size of drawing area */
  208. vextern short x_center, y_center;
  209. vextern short edit_miny;
  210.  
  211. vextern double rot_angle;
  212. vextern double SCALE, distance;
  213.  
  214. vextern char title[80];        /* the message on the screen's title bar*/
  215. extern char *errstring[];
  216.  
  217. vextern action_bufsize, act_buf;    /* in-use vs. next time */
  218. vextern operation_bufsize, op_buf;
  219.  
  220. vextern Operation *operation;
  221. vextern char *action;
  222.  
  223. vextern changes;    /* number of operations given since last save */
  224.